package com.ruoyi.library.controller;

import javax.annotation.Resource;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.library.api.params.DigitalTwinSpaceParams;
import com.ruoyi.library.api.query.DigitalTwinSpaceQuery;
import com.ruoyi.library.api.vo.DigitalTwinSpaceVO;
import com.ruoyi.library.domain.DtsDigitalTwinSpace;
import com.ruoyi.library.service.IDtsDigitalTwinSpaceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.core.web.controller.BaseController;

/**
 * 空间信息
 *
 * @author ZhangYu
 * @date 2024-05-16
 */
@Api(tags = "空间信息")
@RestController
@RequestMapping("/space")
public class DtsDigitalTwinSpaceController extends BaseController {

    @Resource
    private IDtsDigitalTwinSpaceService digitalTwinSpaceService;

    /**
     * 添加空间信息
     *
     * @param digitalTwinSpaceParams 空间信息
     * @return 添加信息
     */
    @ApiOperation("添加空间信息")
    @PostMapping("/add")
    public R<?> addSpaceInfo(@RequestBody DigitalTwinSpaceParams digitalTwinSpaceParams) {
        digitalTwinSpaceService.addSpaceInfo(digitalTwinSpaceParams);
        return R.ok();
    }

    /**
     * 删除空间信息
     *
     * @param id 唯一主键
     * @return 删除信息
     */
    @ApiOperation("删除空间信息")
    @DeleteMapping("/delete")
    public R<?> deleteSpaceInfo(@RequestParam Long id) {
        digitalTwinSpaceService.removeById(id);
        return R.ok();
    }

    /**
     * 修改空间信息
     *
     * @param digitalTwinSpaceParams 空间信息
     * @return 修改信息
     */
    @ApiOperation("修改空间信息")
    @PutMapping("/update")
    public R<?> updateSpaceInfo(@RequestBody DigitalTwinSpaceParams digitalTwinSpaceParams) {
        if (ObjectUtil.isEmpty(digitalTwinSpaceParams.getId())) {
            return R.fail("id不能为空");
        }
        DtsDigitalTwinSpace digitalTwinSpace = BeanUtil.copyProperties(digitalTwinSpaceParams, DtsDigitalTwinSpace.class);
        digitalTwinSpaceService.updateById(digitalTwinSpace);
        return R.ok();
    }

    /**
     * 查询空间信息
     *
     * @param id 唯一id
     * @return 空间信息
     */
    @ApiOperation("查询空间信息")
    @GetMapping("/get")
    public R<DigitalTwinSpaceVO> getSpaceInfo(@RequestParam Long id) {
        DigitalTwinSpaceVO digitalTwinSpace = digitalTwinSpaceService.getSpaceInfo(id);
        return R.ok(digitalTwinSpace);
    }

    /**
     * 空间信息分页
     *
     * @param digitalTwinSpaceQuery 空间信息查询条件
     * @return 空间信息分页
     */
    @ApiOperation("空间信息分页")
    @GetMapping("/page")
    public R<Page<DigitalTwinSpaceVO>> spaceInfoPage(DigitalTwinSpaceQuery digitalTwinSpaceQuery) {
        Page<DigitalTwinSpaceVO> spacePage = digitalTwinSpaceService.spaceInfoPage(digitalTwinSpaceQuery);
        return R.ok(spacePage);
    }

}
